package com.test;
/*
//1
//定义Animal类
class Animal{
    private String name;        //声明name属性
    private int age;        //声明age属性
    public final String COLOR="黑色";     //定义COLOR属性
    //name和age属性是私有属性，所以使用的是setter方法访问。
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int age){
        this.age=age;
    }
}

//定义Dog类继承Animal类
class Dog extends Animal{
}
 */

/*
//2
class Animal{
    private String name;
    private int age;
    public String getName(){
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
//定义Dog类继承Animal类
class Dog extends Animal{
    private String color;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

 */

/*
//3 方法的重写
class Animal{
    void shout(){
        System.out.println("动物发出叫声");
    }
}
class Dog extends Animal{
    void shout(){
        System.out.println("汪汪汪！");
    }
}

 */

/*
//4
class Animal {
    //定义动物叫的方法
    public void shout() {
        System.out.println("动物发出叫声");
    }
}
class Dog extends Animal{
    //重写父类Animal中的shout()方法
//    private void shout() {
//        System.out.println("汪汪汪……");
//    }
    //'shout()' in 'com.test.Dog' clashes with 'shout()' in 'com.test.Animal';
    // attempting to assign weaker access privileges ('private'); was 'public'
}

 */

/*
//5 super 访问父类的非私有属性或调用父类的非私有方法
class Animal{
    String name="藏獒";
    void shout(){
        System.out.println("动物叫声");
    }
}
class Dog extends Animal{
    //重写父类Animal的shout()方法，扩大了访问权限
    public void shout(){
        super.shout();      //调用父类的shout方法
        System.out.println("汪汪汪汪汪汪");
    }
    public void printName(){
        System.out.println("名字："+super.name);   //访问父类的name属性
    }
}

 */

public class Example01 {
    /*
    //1
    public static void main(String[] args){
        Dog dog=new Dog();
        dog.setName("藏獒");
        dog.setAge(3);
        System.out.println("宠物是："+dog.getName()+",今天"+dog.getAge()+"岁了。颜色是"+dog.COLOR);
    }

     */

    /*
    //2
    public static void main(String[] args){
        Dog dog1 = new Dog();       //创建并实例化dog对象
        dog1.setName("花花");     //访问的是父类Animal中的setter方法
        dog1.setAge(2);
        dog1.setColor("pink");
        System.out.println("名称："+dog1.getName()+",年龄："+dog1.getAge()+ ",颜色："+dog1.getColor());
    }

     */

    /*
    //3
    public static void main(String[] args){
        Dog dog=new Dog();
        dog.shout();
    }

     */

    /*
    //5
    public static void main(String[] args){
        Dog dog1=new Dog();
        dog1.shout();
        dog1.printName();
    }

     */
}

//（1）包名中所有字母小写
//
//（2）类名和接口名的每个首字母都大写，ArrayList
//
//（3）常量名中所有字母都大写，单词之间用下画线连接，DAY_OF_MONTH
//
//（4）变量名和方法名的第一个单词首字母小写，从第二个单词开始每个单词首字母大写，lineNumber，getLineNumber
//
//（5）在程序中，尽量使用有意义的英文单词定义标识符，使程序便于阅读，userName定义用户，password定义密码